home *** CD-ROM | disk | FTP | other *** search
- char *connv = "Connect functions CTOS Version-1.00, Summer 1987";
-
- /* C K C O N U -- Terminal connection to remote system */
-
- /* modified for CTOS C2.0 by Joel Dunn, UNC-CH, October 1986 */
-
- #include "ctermi.h"
-
- extern int local, speed, escape, duplex, parity, flow, seslog, mdmtyp,
- termtype;
- extern char ttname[], sesfil[];
-
- /* Variables global to this module */
- int c; /* c is a character, but must be signed
- integer to pass thru -1, which is the
- modem disconnection signal, and is
- different from the character 0377 */
- int i, active;
-
- char *chstr();
-
- /* C O N E C T -- Perform terminal connection */
-
- conect() {
- int n;
- char errmsg[50], *erp;
-
- if (!local) {
- printf("Sorry, you must 'set line' first\n");
- return(-2);
- }
- if (speed < 0) {
- printf("Sorry, you must 'set speed' first\n");
- return(-2);
- }
- if ((escape < 0) || (escape > 0177)) {
- printf("Your escape character is not ASCII - %d\n",escape);
- return(-2);
- }
- if (ttopen(ttname,local,mdmtyp) < 0) {
- erp = errmsg;
- sprintf(erp,"Sorry, can't open %s",ttname);
- perror(errmsg);
- return(-2);
- }
- printf("\nConnecting thru %s, speed %d.\r\n",ttname,speed);
- printf("The local escape character is %s (%d).\r\n",chstr(escape),escape);
- printf("Type the local escape character followed by C to get back,\r\n");
- printf("or followed by ? to see other options.\r\n");
- if (seslog) printf("(Session logged to %s.)\r\n",sesfil);
-
- /* Condition console terminal and communication line */
-
- if (conbin(escape) < 0) {
- printf("Sorry, can't condition console terminal\n");
- return(-2);
- }
- if (ttvt(speed,flow) < 0) {
- conres();
- printf("Sorry, Can't condition communication line\n");
- return(-2);
- }
-
- /* Select connect function based on terminal type */
- switch (termtype)
- {
- case 0: /* TTY */
- contty();
- return(0);
- case 1: /* VT100, routines in ckvt100.c */
- convt100();
- return(0);
- default: /* other value */
- printf("\n\nInvalid terminal type.\n\n");
- return(-2);
- }
-
- }
-
- /* C O N T T Y -- Connect in TTY mode */
- contty()
-
- {
- printf("\n\nConnected in TTY Emulation Mode\n");
- active = 1;
- while (((c = ttinc(0)) >= 0) & active)
- {
-
- /* read, prints port input */
-
- if (c > 0)
- {
- c &= 0177; /* Got a char, strip parity. */
- conoc(c); /* Put it on the screen. */
- if (seslog) zchout(ZSFILE,c); /* If logging, log it. */
- }
-
- /* read, prints keyboard input */
-
- c = coninc(0) & 0177;
- if (c == escape)
- { /* Look for escape char */
- c = coninc(9999) & 0177;
- doesc(c);
- }
- else if (c > 0)
- { /* Ordinary character */
- ttoc(dopar(c)); /* Send with desired parity */
- if (duplex) { /* Half duplex? */
- conoc(c); /* Yes, echo it. */
- /* And maybe log it. */
- if (seslog) zchout(ZSFILE,c);
- }
- }
-
- }
-
- if (c < 0)
- { /* Comm line hangup detected*/
- printf("\r\nCommunications line failure\r\n");
- }
- conres(); /* Reset the console. */
- printf("\nTTY Emulation Disconnected\n");
- return(0);
- }
-
- /* H C O N N E -- Give help message for connect. */
-
- hconne() {
- int c;
- static char *hlpmsg[] = {"\
- \r\nC to close the connection, or:",
- "\r\n S for status",
- "\r\n ? for help",
- "\r\n B to send a BREAK",
- "\r\n 0 to send a null",
- "\r\n escape character twice to send the escape character.\r\n\r\n",
- "" };
-
- conola(hlpmsg); /* Print the help message. */
- conol("Command>"); /* Prompt for command. */
- c = coninc(9999);
- conoc(c); /* Echo it. */
- conoll("");
- c &= 0177; /* Strip any parity. */
- return(c); /* Return it. */
- }
-
-
- /* C H S T R -- Make a printable string out of control key */
-
- static char *
- chstr(c) int c; {
- static char s[15];
- char *cp = s;
-
- switch (c)
- {
- case 0:
- sprintf(cp,"HELP");
- break;
- case 1:
- sprintf(cp,"'up arrow'");
- break;
- case 2:
- sprintf(cp,"MARK");
- break;
- case 4:
- sprintf(cp,"FINISH");
- break;
- case 5:
- sprintf(cp,"PREV PAGE");
- break;
- case 7:
- sprintf(cp,"CANCEL");
- break;
- case 8:
- sprintf(cp,"BACKSPACE");
- break;
- case 9:
- sprintf(cp,"TAB");
- break;
- case 10:
- sprintf(cp,"BOUND");
- break;
- case 11:
- sprintf(cp,"'down arrow'");
- break;
- case 12:
- sprintf(cp,"NEXT PAGE");
- break;
- case 13:
- sprintf(cp,"RETURN/NEXT");
- break;
- case 14:
- sprintf(cp,"'left arrow'");
- break;
- case 15:
- sprintf(cp,"MOVE");
- break;
- case 17:
- sprintf(cp,"SCROLL UP");
- break;
- case 18:
- sprintf(cp,"'right arrow'");
- break;
- case 19:
- sprintf(cp,"SCROLL DOWN");
- break;
- case 20:
- sprintf(cp,"COPY");
- break;
- case 21:
- sprintf(cp,"F1");
- break;
- case 22:
- sprintf(cp,"F2");
- break;
- case 23:
- sprintf(cp,"F3");
- break;
- case 24:
- sprintf(cp,"F4");
- break;
- case 25:
- sprintf(cp,"F5");
- break;
- case 26:
- sprintf(cp,"F6");
- break;
- case 27:
- sprintf(cp,"GO");
- break;
- case 28:
- sprintf(cp,"F7");
- break;
- case 29:
- sprintf(cp,"F8");
- break;
- case 30:
- sprintf(cp,"F9");
- break;
- case 31:
- sprintf(cp,"F10");
- break;
- default:
- s[0] = c;
- s[1] = '\0';
- break;
- }
-
- cp = s;
- return(cp);
- }
-
- /* D O E S C -- Process an escape character argument */
-
- doesc(c) char c; {
- int d;
-
- c &= 0177;
- while (1) {
- if (c == escape) { /* Send escape character */
- d = dopar(c);
- ttoc(d);
- return;
- } else /* Or else look it up below. */
- if (isupper(c)) c = tolower(c);
-
- switch (c) {
-
- case 'c': /* Close connection */
- case '\03':
- active = 0;
- conol("\r\n");
- return;
-
- case 'b': /* Send a BREAK */
- case '\02':
- ttsndb();
- return;
-
- case 's': /* Status */
- case '\023':
- conol("\r\nConnected thru ");
- conoll(ttname);
- if (seslog) {
- conol(", logging to ");
- conol(sesfil);
- }
- return;
-
- case '?': /* Help */
- c = hconne();
- continue;
-
- case '0': /* Send a null */
- c = '\0';
- d = dopar(c);
- ttoc(d);
- return;
-
- case SP: /* Space, ignore */
- return;
-
- default: /* Other */
- conoc(BEL); /* Invalid esc arg, beep */
- return;
- }
- }
- }
-